home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / Dots & Pixels / sources / fullscreen.cp < prev    next >
Text File  |  1995-09-29  |  4KB  |  172 lines

  1. #include <Windows.h>
  2. #include <QDOffscreen.h>
  3.  
  4. #include <Fonts.h>
  5. #include <Packages.h>
  6. #include <SegLoad.h>
  7. #include <ToolUtils.h>
  8. #include <Palettes.h>
  9.  
  10. #include "general.h"
  11. #include "port.h"
  12. #include "window.h"
  13. #include "depthChange.h"
  14. #include "fullscreen.h"
  15.  
  16. int fullscreen::numInstances = 0;
  17. short fullscreen::oldMBarHeight = 0;
  18. short * const fullscreen::MBarHeight = (short *)0x0BAA;
  19.  
  20. PaletteHandle fullscreen::thePalette = (PaletteHandle) 0;
  21.  
  22. fullscreen::fullscreen( Boolean erase) : port(), depthChange()
  23. {
  24.     makeOne( 0L, erase);
  25.     if( thePalette != 0)
  26.     {
  27.         SetPalette( myWindow, thePalette, false);
  28.     }
  29. }
  30.  
  31. fullscreen::fullscreen( int bitDepth, Boolean erase)
  32.     : port(), depthChange( bitDepth)
  33. {
  34.     makeOne( 0L, erase);
  35. }
  36.  
  37. fullscreen::fullscreen( int bitDepth, CTabHandle theColorTable, Boolean erase)
  38.     : port(), depthChange( bitDepth)
  39. {
  40.     makeOne( theColorTable, erase);    
  41. }
  42.  
  43. fullscreen::fullscreen( GDHandle theGDHandle, int bitDepth,
  44.     CTabHandle theColorTable, Boolean erase)
  45.     : port(), depthChange( bitDepth, theGDHandle)
  46. {
  47.     SetGDevice( theGDHandle);
  48.     makeOne( theColorTable, erase);
  49. }
  50.  
  51. void fullscreen::setentries( short start, short count, ColorSpec *theTable) const
  52. {
  53.     use();
  54.     ::SetEntries( start, count, theTable);
  55. }
  56.  
  57. void fullscreen::makeOne( CTabHandle theColorTable, Boolean erase)
  58. {
  59.     Rect rect;
  60.  
  61.     myWindow = NewCWindow( &myWindowRecord, &rect, "\p", false, plainDBox, (WindowPtr)-1L, true, 0L);
  62.  
  63.         MoveWindow( myWindow, qd.screenBits.bounds.left, qd.screenBits.bounds.top, true);
  64.         SizeWindow( myWindow, qd.screenBits.bounds.right - qd.screenBits.bounds.left,
  65.                         qd.screenBits.bounds.bottom - qd.screenBits.bounds.top, false);
  66.     if( !erase)
  67.     {
  68.         short * const paintWhite = (short * const)0x09DC;
  69.         *paintWhite = 0;
  70.     }
  71.     ShowWindow( myWindow);
  72.     SetPort( myWindow);
  73.  
  74.     /****************************************************/
  75.     /* Set the window's visRgn to include the menu bar. */
  76.     /****************************************************/
  77.  
  78.         RectRgn( (*myWindow).visRgn, &qd.screenBits.bounds);
  79.         InvalRect( &qd.screenBits.bounds);
  80.         
  81.         if( erase)
  82.         {
  83.             EraseRect( &qd.screenBits.bounds);
  84.         }
  85.  
  86.     /*************************************************/
  87.     /* Set the global MBarHeight to 0 to prevent any */
  88.     /*    other apps from writing to the menu bar.     */
  89.     /*************************************************/
  90.     
  91.     numInstances += 1;
  92.     
  93.     if( numInstances == 1)
  94.     {
  95.         oldMBarHeight = *MBarHeight;
  96.         *MBarHeight = 0;
  97.         //
  98.         // Try to obtain the standard palette;
  99.         // don't worry when it is not found.
  100.         //
  101.         thePalette = GetNewPalette( 128);
  102.     }
  103.     GetGWorld( &myGWorldPtr, &myGDHandle);
  104.     
  105.     if( theColorTable != 0)
  106.     {
  107.         unsigned char theState = HGetState( (Handle)theColorTable);
  108.         HLock( (Handle)theColorTable);
  109.         const short tableSize = (**theColorTable).ctSize;
  110.         ColorSpec *theColors = (**theColorTable).ctTable;
  111.         SetEntries( 0, tableSize, theColors);
  112.         HSetState( (Handle)theColorTable, theState);
  113.         //
  114.         // Also change the palette associated with the fullscreen window
  115.         // to consist of explicit colors only. Thus, one can use the
  116.         // palette manager's calls PmForeColor and PmBackColor to select
  117.         // the color value to write in the fullscreen's video memory.
  118.         // We pass 'tableSize + 1' since tableSize is zero-based.
  119.         //
  120.         myPalette = NewPalette(
  121.                 tableSize + 1, theColorTable, pmExplicit, 0x0000);
  122.         SetPalette( myWindow, myPalette, false);
  123.         ActivatePalette( myWindow);
  124.     } else {
  125.         myPalette = 0;
  126.     }
  127.     #ifndef _APPL_
  128.         #ifndef THINK_CPLUS
  129.             //
  130.             // signal 'application' to close this window on exit
  131.             //
  132.             SetWRefCon( myWindow, 'vens');
  133.         #endif
  134.     #endif
  135.     myRect = myWindow->portRect;
  136.     myPix  = (PixMapPtr)(&(myWindow->portBits));
  137. }
  138.  
  139. fullscreen::~fullscreen()
  140. {
  141.     CloseWindow( myWindow); // we passed our own WindowRecord => don't call DisposeWindow
  142.     numInstances -= 1;
  143.     //
  144.     // reset MBarHeight global variable if this was the last instance of 'fullscreen'
  145.     //
  146.     if( numInstances == 0)
  147.     {
  148.         *MBarHeight = oldMBarHeight;
  149.  
  150.         if( thePalette != 0)
  151.         {
  152.             ReleaseResource( (Handle)thePalette);
  153.             thePalette = 0;
  154.         }
  155.     }
  156.     if( myPalette != 0)
  157.     {
  158.         DisposePalette( myPalette);
  159.     }
  160. }
  161.  
  162. void fullscreen::show() const
  163. {
  164.     ShowWindow( myWindow);
  165.     SelectWindow( myWindow);
  166. }
  167.  
  168. void fullscreen::hide() const
  169. {
  170.     HideWindow( myWindow);
  171. }
  172.